// utils/keyboardManager.ts
// 键盘快捷键管理器

type ShortcutCallback = () => void;

class KeyboardManager {
  private shortcuts: Map<string, ShortcutCallback> = new Map();
  private isMac: boolean;

  constructor() {
    this.isMac = navigator.platform.toUpperCase().indexOf('MAC') >= 0;
    this.init();
  }

  private init() {
    document.addEventListener('keydown', this.handleKeyDown.bind(this));
  }

  private handleKeyDown(event: KeyboardEvent) {
    // 构建快捷键标识符
    const key = this.buildKeyIdentifier(event);
    
    // 检查是否注册了该快捷键
    if (this.shortcuts.has(key)) {
      event.preventDefault();
      const callback = this.shortcuts.get(key);
      if (callback) {
        callback();
      }
    }
  }

  private buildKeyIdentifier(event: KeyboardEvent): string {
    const modifiers: string[] = [];
    
    if (event.ctrlKey) modifiers.push('Ctrl');
    if (event.shiftKey) modifiers.push('Shift');
    if (event.altKey) modifiers.push('Alt');
    if (event.metaKey) modifiers.push('Meta'); // Mac的Cmd键
    
    // 特殊键处理
    let key = event.key;
    if (key === ' ') key = 'Space';
    
    // 组合键标识符
    return [...modifiers, key].join('+');
  }

  /**
   * 注册快捷键
   * @param key 快捷键组合，如 'Ctrl+S' 或 'Meta+K'
   * @param callback 回调函数
   */
  registerShortcut(key: string, callback: ShortcutCallback) {
    this.shortcuts.set(key, callback);
  }

  /**
   * 注销快捷键
   * @param key 快捷键组合
   */
  unregisterShortcut(key: string) {
    this.shortcuts.delete(key);
  }

  /**
   * 清空所有快捷键
   */
  clearAllShortcuts() {
    this.shortcuts.clear();
  }

  /**
   * 获取所有已注册的快捷键
   */
  getRegisteredShortcuts(): string[] {
    return Array.from(this.shortcuts.keys());
  }
}

// 创建单例实例
export const keyboardManager = new KeyboardManager();

// 默认导出以支持其他导入方式
export default keyboardManager;